from Tkinter import *
from adq_28 import *
import adq_28
import unittest

class TestPlanillaCompleta(unittest.TestCase): # nombre de la clase a eleccion, pasar unittest.TestCase u otra clase

    def setUp(self):
        self.medidas = [0.0, 0.03, 0.02, 0.0, 0.1, 0.0, 0.04, 0.01, 0.1, 0.0, 0.0, 0.03, 0.01, 0.0, 0.1, 0.0, 0.03, 0.1, 0.0, 0.04, 0.0, 0.0, 0.04, 0.1]
        self.trabajos = []
        self.numero_trabajo = 0
        self.trabajos.append({'bloques':[], 'numero_bloque':None, 'tabla':{}, 'lista_v':['0' for i in range(2*len(adq_28.long_nom))],
            'quitados':{}, 'elegido':False, 'ot_str':'OT Nro.', 'n1_str':'', 'n2_str':'', 'n3_str':'',
            'n4_str':'', 'n5_str':'', 'n_ot_str':'', 'laboratorista_str':'', 'laboratorista_o1_str':'',
            'laboratorista_o2_str':'', 'id_patron_str':'', 'marca_str':'', 'material_str':'', 'fecha_str':['', '', '']})
        self.bloques = self.trabajos[0]['bloques']
        self.tabla = self.trabajos[0]['tabla']
        for i in range(122):
            self.tabla[i] = 2*i
        self.root = Tk()
        # creacion de gui
        self.gui = GuiTkinter(self.root)
        self.gui.set_fecha_a('2014')
        self.gui.set_fecha_m('02')
        self.gui.set_fecha_d('25')
        self.gui.set_id_patron('LIM1-002')
        self.gui.set_laboratorista('TEST')
        self.gui.set_ot('OT')
        self.gui.set_n_ot('1234')
        self.gui.set_marca('TESA')
        self.gui.set_material('ACERO')
        # creacion de bloques
        for i in range(122):
            self.bloques.append(Bloque(self.gui))
            self.bloques[i].set_id_patron('LIM1-002')
            self.bloques[i].set_adherencia('Adhiere')
            self.bloques[i].set_marca('TESA')
            self.bloques[i].set_material('ACERO')
            self.bloques[i].set_n_serie('00'+str(i))
            self.bloques[i].set_t_min(19.8)
            self.bloques[i].set_t_max(20.1)
            for j in range(24):
                self.bloques[i].set_instancia(j)
                self.bloques[i].set_valor(self.medidas[j])
        # creacion de planilla
        self.planilla = Planilla(self.bloques)
        self.planilla.encabezado(self.gui.get_ot(), self.gui.get_n_ot(), 
            self.gui.get_marca(), 
            self.gui.get_material(), self.gui.get_fecha_a(), 
            self.gui.get_fecha_m(), self.gui.get_fecha_d(), adq_28.long_nom,
            self.tabla, self.bloques)
        self.planilla.escribir_medidas(self.gui.get_laboratorista(),
            self.gui.get_laboratorista_o1(), self.gui.get_laboratorista_o2(), 
            adq_28.long_nom, self.tabla, self.bloques)
        self.planilla.crear_informe(self.bloques)

        self.destino = tkFileDialog.asksaveasfilename(defaultextension='.xls',
        filetypes=[('todos', '.*'), ('planilla', '.xls')], initialdir='C:\\',
        initialfile='.xls', title='Exportar trabajo TESA')
        if self.destino:
            if self.destino[-5:]=='/.xls':
                if self.gui.get_n_ot()=='':
                    self.d_h = datetime.now()
                    self.destino = self.destino[:-5]+str(self.d_h)[0:10]+'_'+str(self.d_h)[11:13]+'-'+str(self.d_h)[14:16]+'-'+str(self.self.d_h)[17:19]+self.destino[-4:]
                else:
                    self.destino =  self.destino[:-4] + self.gui.get_ot() + self.gui.get_n_ot() + self.destino[-4:]
            self.planilla.save_sheet(self.destino)
        
    def tearDown(self):
        self.trabajos = []
        self.numero_trabajo = 0
        self.trabajos.append({'bloques':[], 'numero_bloque':None, 'tabla':{}, 'lista_v':['0' for i in range(2*len(adq_28.long_nom))],
            'quitados':{}, 'elegido':False, 'ot_str':'OT Nro.', 'n1_str':'', 'n2_str':'', 'n3_str':'',
            'n4_str':'', 'n5_str':'', 'n_ot_str':'', 'laboratorista_str':'', 'laboratorista_o1_str':'',
            'laboratorista_o2_str':'', 'id_patron_str':'', 'marca_str':'', 'material_str':'', 'fecha_str':['', '', '']})
        self.bloques = self.trabajos[0]['bloques']
        self.tabla = self.trabajos[0]['tabla']

    #@unittest.skip('para ahorrar tiempo.')
    def test_creacion_gui_bloques(self):
        # correcto uncionamiento de gets y sets
        self.assertEqual(self.gui.get_ot(), 'OT')
        self.assertEqual(self.gui.get_fecha_a(), '2014')
        self.assertEqual(self.gui.get_fecha_m(), '02')
        self.assertEqual(self.gui.get_fecha_d(), '25')
        self.assertEqual(self.gui.get_id_patron(), 'LIM1-002')
        self.assertEqual(self.gui.get_laboratorista(), 'TEST')
        self.assertEqual(self.gui.get_ot(), 'OT')
        self.assertEqual(self.gui.get_n_ot(), '1234')
        self.assertEqual(self.gui.get_marca(), 'TESA')
        self.assertEqual(self.gui.get_material(), 'ACERO')
        self.assertEqual(self.bloques[0].get_id_patron(), 'LIM1-002')
        self.assertEqual(self.bloques[0].get_marca(), 'TESA')
        self.assertEqual(self.bloques[0].get_material(), 'ACERO')
        self.assertEqual(self.bloques[0].get_n_serie(), '000')
        self.assertEqual(self.bloques[0].get_t_max(), 20.1)
        self.assertEqual(self.bloques[0].get_t_min(), 19.8)
        self.assertTrue(self.bloques[0].get_instancia() < 24)
        self.assertEqual(self.bloques[0].get_instancia_validacion(), 0)
        self.assertTrue(self.bloques[0].check())
        self.assertTrue(self.bloques[121].check())
        
class TestMultiplesTrabajos(unittest.TestCase):
    def setUp(self):
        adq_28.trabajos = []
        adq_28.numero_trabajo = 0
        self.medidas = [0.0, 0.03, 0.02, 0.0, 0.1, 0.0, 0.04, 0.01, 0.1, 0.0, 0.0, 0.03, 0.01, 0.0, 0.1, 0.0, 0.03, 0.1, 0.0, 0.04, 0.0, 0.0, 0.04, 0.1]
        self.root = Tk()
        # creacion de gui
        self.gui = GuiTkinter(self.root)
        adq_28.trabajos.append({'bloques':[], 'numero_bloque':None, 'tabla':{}, 'lista_v':['0' for n in range(2*len(adq_28.long_nom))],
            'quitados':{}, 'elegido':False, 'ot_str':'OT Nro.', 'n1_str':'', 'n2_str':'', 'n3_str':'',
            'n4_str':'', 'n5_str':'', 'n_ot_str':'', 'laboratorista_str':'', 'laboratorista_o1_str':'',
            'laboratorista_o2_str':'', 'id_patron_str':'', 'marca_str':'', 'material_str':'', 'fecha_str':['', '', '']})
        for i in range(3):
            adq_28.nuevo_trabajo()
            adq_28.bloques = adq_28.trabajos[i]['bloques']
            for j in range(1+i):
                adq_28.bloques.append(Bloque(self.gui))
                adq_28.bloques[j].set_id_patron('LIM1-002')
                adq_28.bloques[j].set_marca('TESA')
                adq_28.bloques[j].set_material('ACERO')
                adq_28.bloques[j].set_n_serie('00'+str(i))
                adq_28.bloques[j].set_t_max(19.8)
                adq_28.bloques[j].set_t_min(20.1)
                if i<2:
                    for k in range(24):
                        adq_28.bloques[j].set_instancia(k)
                        adq_28.bloques[j].set_valor(self.medidas[k])
                
    def tearDown(self):
        adq_28.trabajos = []
        adq_28.numero_trabajo = 0
        adq_28.trabajos.append({'bloques':[], 'numero_bloque':None, 'tabla':{}, 'lista_v':['0' for i in range(2*len(adq_28.long_nom))],
            'quitados':{}, 'elegido':False, 'ot_str':'OT Nro.', 'n1_str':'', 'n2_str':'', 'n3_str':'',
            'n4_str':'', 'n5_str':'', 'n_ot_str':'', 'laboratorista_str':'', 'laboratorista_o1_str':'',
            'laboratorista_o2_str':'', 'id_patron_str':'', 'marca_str':'', 'material_str':'', 'fecha_str':['', '', '']})
        adq_28.bloques = adq_28.trabajos[0]['bloques']
        
    def test_cambio_de_trabajo_actual(self):
        adq_28.botones[1].btn.bind('<ButtonPress>', adq_28.botones[1].actualizar())
        self.assertEqual(len(adq_28.bloques), 2)
        adq_28.botones[0].btn.bind('<ButtonPress>', adq_28.botones[0].actualizar())
        self.assertTrue(adq_28.bloques[0].check())

if __name__ == '__main__':
    unittest.main()
